package com.yujiahao.bigdata.rdd.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  //TODO map转换算子

  todo 算子-所谓算子其实就是RDD的方法
      1、转换算子其实就是将旧的RDD转换为新的RDD的方法
      2、默认执行算子之后，产生的新的rdd分区数量不变
      3、因为Spark的计算时分布式计算，所以不同分区的数据没有顺序
      4、数据处理时，分区间无序，分区内有序（类似kafka）
 */

object Spark_RDD_Pper_Transform_Map {
  def main(args: Array[String]): Unit = {


    //TODO 1、获得连接
    val conf: SparkConf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc: SparkContext = new SparkContext(conf)

    val oldRdd = sc.makeRDD(List(1, 2, 3, 4))

    //测试转换之前的分区
    oldRdd.saveAsTextFile("output")

    //TODO map()转换算子
    //map算子可以将数据集中的每一条数据进行转换，映射后，返回新的数据，形成新的数据集合模型
    //旧的RDD => 算子 => 新的RDD
    val newrdd = oldRdd.map(_ * 2)
    //测试转换之后的分区
    newrdd.saveAsTextFile("output1")

    //打印遍历
    newrdd.collect().foreach(println)

    //TODO 2、关闭连接
    sc.stop()
  }
}